#初始化app
from flask import Flask
from settings import map_config
#负责创建APP对象
def create_app(config_type):
    app=Flask(__name__)
    #加载项目配置
    app.config.from_object(map_config.get(config_type))#这样子传的是一个类进来
    #初始化限制器(用于限制蓝图中视图函数 资源等的速率)
    from comment.utils.limiter import limiter as lmt
    lmt.init_app(app)
    #加载日志处理的工具
    from comment.utils.logging import create_logger
    create_logger(app)


    #初始化SQLALchemy对象
    from  comment.models import db
    db.init_app(app)#这里才算真正初始化db

    #初始化redis数据库的连接
    #这时候的app被初始化了
    from comment.utils.shopping_redis import redis_clint
    redis_clint.init_app(app)#这时候才是真正的初始化redis客户端连接


    #添加请求钩子（如下是添加全局的请求钩子）
    from comment.utils.requests_wares import jwt_request_authorization
    app.before_request(jwt_request_authorization)#把请求钩子添加进app以后 请求钩子就会生效 所有服务器的请求都有当前的请求钩子

    #加载模块的蓝图

    from Shonpping.resources.user import user_bp
    from Shonpping.resources.index import index_bp
    from Shonpping.resources.goods import goods_bp
    from Shonpping.resources.coupon import coupon_bp
    from Shonpping.resources.cart import cart_bp
    # from Shonpping.resources.coupon import coupon_bp
    app.register_blueprint(user_bp,url_prefix='/user')#注册蓝图
    app.register_blueprint(index_bp)#在app中注册蓝图 下一步是 在蓝图中创建资源api
    app.register_blueprint(goods_bp)
    app.register_blueprint(coupon_bp)
    app.register_blueprint(cart_bp)

    return app